using System;

using Pegasus.Diagnostics;

namespace Pegasus.Workflow.Service
{
	/// <summary>
	/// Event args for when the status of a workflow changes
	/// </summary>
	[Serializable]
	public class WorkflowStatusEventArgs : WorkflowEventArgs
	{
		// Local Instance Values
		private WorkflowStatus m_oldStatus;
		private WorkflowStatus m_newStatus;

		/// <summary>
		/// Initializes a new instance of the <see cref="T:WorkflowStatusEventArgs"/> class.
		/// </summary>
		/// <param name="workflowId">The workflow id.</param>
		/// <param name="oldStatus">The old status.</param>
		/// <param name="newStatus">The new status.</param>
		public WorkflowStatusEventArgs( int workflowId, WorkflowStatus oldStatus, WorkflowStatus newStatus ) :
			base( workflowId )
		{
			// Check Parameters
			ParamCode.AssertRange( workflowId, 1, int.MaxValue, "workflowId" );

			m_oldStatus = oldStatus;
			m_newStatus = newStatus;
		}

		/// <summary>
		/// Gets the old status.
		/// </summary>
		/// <value>The old status.</value>
		public WorkflowStatus OldStatus
		{
			get
			{
				return m_oldStatus;
			}
		}

		/// <summary>
		/// Gets the new status.
		/// </summary>
		/// <value>The new status.</value>
		public WorkflowStatus NewStatus
		{
			get
			{
				return m_newStatus;
			}
		}
	}
}
